package com.company.common.sql.mapper;


import com.company.common.sql.builder.SqlBuilder;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * Mybatis动态SQL语句
 *
 * @author 张森
 * @date 2021-11-6
 */
public interface MakerwitSqlMapper {

    /**
     * 通过表名 、id查询数据 如果id=0 则查询全表数据
     *
     * @param tabName
     * @param id
     * @return
     */
    @SelectProvider(type = SqlBuilder.class)
    List<Map<String, Object>> selectTabNameById(@Param("tabName") String tabName, @Param("id") int id);

    /**
     * 根据map条件查询数据
     *
     * @param tabName 表名
     * @param columns where条件map 支持模糊查询
     * @return
     */
    @SelectProvider(type = SqlBuilder.class)
    List<Map<String, Object>> selectInfoByColumns(@Param("tabName") String tabName, @Param("columns") Map columns);

    /**
     * 根据map条件查询数据
     *
     * @param tabName 表名
     * @param columns where条件map 支持模糊查询
     * @param orderby orderby 字段信息
     * @return
     */
    @SuppressWarnings("rawtypes")
    @SelectProvider(type = SqlBuilder.class)
    List<Map<String, Object>> selectInfoByColumnsOrderby(@Param("tabName") String tabName, @Param("columns") Map columns, @Param("orderby") String orderby);

    /**
     * 根据修改set与条件where map 修改tabName数据
     *
     * @param tabName
     * @param set
     * @param where
     * @return
     */
    @UpdateProvider(type = SqlBuilder.class)
    int updateTabBySetWhereMap(@Param("tabName") String tabName, @SuppressWarnings("rawtypes") @Param("set") Map set, @SuppressWarnings("rawtypes") @Param("where") Map where);

    /**
     * 根据where map 删除tabName数据
     *
     * @param tabName
     * @param where
     * @return
     */
    @DeleteProvider(type = SqlBuilder.class)
    int deleteTabByWhereMap(@Param("tabName") String tabName, @SuppressWarnings("rawtypes") @Param("where") Map where);

    /**
     * 根据添加 map 新增tabName数据
     *
     * @param tabName
     * @param columns
     * @return
     */
    @InsertProvider(type = SqlBuilder.class)
    int insertTabNameByColumns(@Param("tabName") String tabName, @SuppressWarnings("rawtypes") @Param("columns") Map columns);

    /**
     * 批量新增
     *
     * @param tabName
     * @param list
     * @param flag    true则空值也插入 false空值不插入
     * @return
     */
    @SuppressWarnings("rawtypes")
    @InsertProvider(type = SqlBuilder.class)
    int insertBatchAll(@Param("tabName") String tabName, @Param("list") List<Map> list, @Param("flag") boolean flag);
}
